package com.lvy.hczn.front.business.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lvy.hczn.front.business.dto.Param;
import com.lvy.hczn.front.system.domain.business.*;
import com.lvy.hczn.front.business.dto.SortTaskDto;

import java.util.List;

public interface SortTaskService extends IService<SortTask> {

    /**
     * 生成分拣任务
     *
     * @return
     * @author yw
     * @date 2022-04-14 21:32:13
     */
    void generateSortTask(List<SaleOrder> list,boolean beforeSort);

    /**
     * 调拨生成分拣任务
     *
     * @return
     * @author yw
     * @date 2022-04-14 21:32:13
     */
    void generateSortTaskByTransfer(List<TransferOrder> list);

    /**
     * 根据分拣员下架分拣原料箱
     *
     * @param clientId
     * @param status
     * @return
     * @author yw
     * @date 2022-04-17 14:56:18
     */
    GoodsBox sortBySpu(String clientId, String status) throws Exception;

    /**
     * 获取去重的货箱编号
     *
     * @param clientId
     * @param status
     * @return
     * @author yw
     * @date 2022-04-17 14:56:18
     */
    List<GoodsBoxDetail> selectUniqueBoxCodeBySpuList(String clientId, String status, SortTaskDto sortTaskDto) throws Exception;

    /**
     * 分拣加工任务，按原料分拣
     *
     * @param clientId
     * @param status
     * @param spuId
     * @return
     * @author yw
     * @date 2022-04-17 15:42:02
     */
    SortTaskDto sortingTask(String clientId, String status, String spuId, Param param) throws Exception;

    /**
     * 发送下架信息
     * 同一个分拣任务，多个货箱编号连续传入wcs
     * 只发一次下架任务，剩余到响应处发送
     *
     * @param clientId
     * @param status
     * @return void
     * @author yw
     * @date 2022-06-21 15:00:11
     */
    void downloadBox(String clientId, String status, SortTaskDto sortTaskDto) throws Exception;

    /**
     * 校验分拣是否结束，结束则更改状态
     *
     * @param clientId
     * @param status
     * @return
     * @author yw
     * @date 2022-04-17 15:42:02
     */
    void sortDone(String clientId, String status) throws Exception;
}
